package top.hmtools.mapper.plus.mysql.select;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;

import tk.mybatis.mapper.annotation.RegisterMapper;

@RegisterMapper
public interface IMysqlSelectMapperPlus<T> {


	
	//####################################  查
	
	/**
	 * 获取所有数据
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	List<T> getAll();
	
	/**
	 * 指定主键名称（Java类字段名字符串），主键值，获取对应的一条数据
	 * @param key
	 * @param id
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	T getOneByPk(@Param(value="key")String key,@Param(value="id")Object id);

	/**
	 * 指定主键名称（Java类字段名字符串），主键集合，获取指定记录集合。入参为空，会返回所有数据
	 * <br>为能够结合pagehelper分页插件使用，本方法输出的SQL语句不含“limit”
	 * @param key
	 * @param ids
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	List<T> getSomeByPk(@Param(value="key")String key,@Param(value="ids")Object... ids);
	
	/**
	 * 指定主键名称（Java类字段名字符串），主键集合，获取指定记录总数。入参为空，会返回所有数据
	 * @param key
	 * @param ids
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	int getCountByPk(@Param(value="key")String key,@Param(value="ids")Object... ids);
	

	/**
	 * 根据条件获取对应数据
	 * <br>为能够结合pagehelper分页插件使用，本方法输出的SQL语句不含“limit”
	 * @param condition
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	List<T> getSomeByCondition(T condition);
	
	/**
	 * 根据条件获取对应数据总数
	 * @param condition
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	int getCountByCondition(T condition);
	
	/**
	 * 根据指定的主键名称、主键集合，获取数据库中存在的主键集合数据
	 * <br>为能够结合pagehelper分页插件使用，本方法输出的SQL语句不含“limit”
	 * @param key
	 * @param ids
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	List<Object> getExistPksByPk(@Param(value="key")String key,@Param(value="ids")Object... ids);
	
	/**
	 * 根据指定的主键名称、主键集合，获取数据库中存在的主键集合数据总数
	 * @param key
	 * @param ids
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	int getExistPksCountByPk(@Param(value="key")String key,@Param(value="ids")Object... ids);
	
	/**
	 * 根据条件，且可以指定一个字段使用范围条件获取对应数据集合
	 * @param condition	条件，在没有被指定的情况下，使用“=”评定是否符合条件
	 * @param column		指定使用范围条件的字段名
	 * @param min	最小值
	 * @param max		最大值
	 * @return
	 */
	@SelectProvider(type = SelectMapperPlusProvider.class,method="dynamicSQL")
	List<T> getSomeByConditionAndRange(@Param("condition")T condition,@Param("column")String column,@Param("min")Object min,@Param("max")Object max);
	
	
	
}
